package caiweiyu.rbac.service;

import caiweiyu.rbac.domain.dto.DeptDto;
import caiweiyu.rbac.domain.entity.Dept;
import caiweiyu.rbac.domain.vo.DeptVo;
import caiweiyu.rbac.domain.vo.Result;

import java.util.Arrays;
import java.util.Date;

public class DeptService {

    //实体对象存储量
    public static int DATA_SIZE=100;
    //实体对象存储数组
    public static Dept[] data=new Dept[DATA_SIZE+1];
    //id计数器
    public static int idCounter=1;

    public static DeptVo convertToVo(Dept dept){

        return new DeptVo(dept.id,dept.name,dept.phone);
    }

    public static Dept createEntity(DeptDto dto,int id){
        Dept dept=new Dept(dto.name,dto.phone);
        dept.id=id;
        return dept;
    }

    public static void updateEntity(DeptDto dto,Dept dept){
        dept.name=dto.name;
        dept.phone=dto.phone;
    }

    public static boolean existsById(int id){
        return id>=1&&id<idCounter&&data[id]!=null;
    }

    public static Result list(){
        DeptVo[]temp=new DeptVo[DATA_SIZE];
        int length=0;
        for(int i=1;i<idCounter;i++){
            if(data[i]!=null){
                temp[length++]=convertToVo(data[i]);
            }
        }
        return Result.success("查询成功", Arrays.copyOf(temp,length));
    }

    public static Result create(DeptDto dto){
        //检查当前储存部门数量是否超过最大容量
        if(idCounter>DATA_SIZE){
            //若超过最大容量，返回失败结果
            return Result.failure("创建失败，超出储存容量");
        }
//        //创建新的部门对象，使用传入的部门名称和电话
//        Dept dept=new Dept(dto.name,dto.phone);
//        //为创建的部门分配一个唯一的id
//        dept.id=idCounter++;
        Dept dept=createEntity(dto,idCounter++);
        //将下部门对象存储到数据数组中
        data[dept.id]=dept;
        //返回成功结果
        return Result.success("创建成功",null);
    }


    public static Result update(DeptDto dto,int id){
        if (!existsById(id)){
            return Result.failure("更新失败，不存在该数据");
        }
        Dept dept=data[id];
//        dept.name=dto.name;
//        dept.phone=dto.phone;
        updateEntity(dto,dept);
        return Result.success("更新成功",null);
    }

    public static Result delete(int id){
        if (!existsById(id)){
            return Result.failure("删除失败，不存在该数据");
        }
        data[id]=null;
        return Result.success("删除成功",null);
    }

}
